#include "usermanager.h"
#include <QDir>
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>

UserManager::UserManager()
{
    createInitialUserFile();
}

UserManager::~UserManager()
{
}

bool UserManager::createUser(const QString& username, const QString& password)
{
    // 读取现有用户文件
    QJsonObject allUsers = loadUserFile();

    // 检查用户名是否已存在
    if (allUsers.contains(username)) {
        return false; // 用户名已存在
    }

    // 构建用户对象
    QJsonObject userObject;
    userObject["username"] = username;
    userObject["password"] = password;
    userObject["lastLoginTime"] = QDateTime::currentDateTime().toString();
    userObject["permissions"] = 0;//默认权限普通用户 0

    // 添加新用户
    allUsers[username] = userObject;

    // 保存用户文件
    saveUserFile(allUsers);

    return true; // 创建用户成功
}

bool UserManager::createAdmin()
{
    // 读取现有用户文件
    QJsonObject allUsers = loadUserFile();

    // 检查用户名是否已存在
    if (allUsers.contains("admin")) {
        return false; // 用户名已存在
    }

    // 构建用户对象
    QJsonObject userObject;
    userObject["username"] = "admin";
    userObject["password"] = "123123";
    userObject["lastLoginTime"] = QDateTime::currentDateTime().toString();
    userObject["permissions"] = 1;//默认admin用户 1

    // 添加新用户
    allUsers["admin"] = userObject;

    // 保存用户文件
    saveUserFile(allUsers);

    return true; // 创建用户成功
}

User UserManager::login(const QString& username, const QString& password)
{
    // 读取现有用户文件
    QJsonObject allUsers = loadUserFile();

    // 检查用户名是否存在
    if (!allUsers.contains(username)) {
        User user;
        user.username = "";
        return user; // 用户名不存在
    }

    // 获取用户对象
    QJsonObject userObject = allUsers[username].toObject();

    // 检查密码是否匹配
    if (userObject["password"].toString() != password) {
        User user;
        user.username = "";
        return user; // 密码不匹配
    }

    // 更新上次登录时间
    userObject["lastLoginTime"] = QDateTime::currentDateTime().toString();
    allUsers[username] = userObject;

    // 保存用户文件
    saveUserFile(allUsers);

    // 构建用户对象
    User user;
    user.username = username;
    user.password = password;
    user.lastLoginTime = QDateTime::currentDateTime().toString();

    return user; // 登录成功，返回用户信息
}



QString UserManager::getLastLoginTime(const QString& username)
{
    // 读取现有用户文件
    QJsonObject allUsers = loadUserFile();

    // 检查用户名是否存在
    if (!allUsers.contains(username)) {
        return ""; // 用户名不存在
    }

    // 获取用户对象
    QJsonObject userObject = allUsers[username].toObject();

    // 返回上次登录时间
    return userObject["lastLoginTime"].toString();
}

//json文件目录
QString UserManager::getUserFilePath() const
{
    return "./users.json";
}

void UserManager::createInitialUserFile()
{
    QString filePath = getUserFilePath();

    QFile file(filePath);
    if (!file.exists()) {
        // 创建初始用户文件
        QJsonObject allUsers;
        saveUserFile(allUsers);
    }
}

void UserManager::saveUserFile(const QJsonObject& jsonObject)
{
    QString filePath = getUserFilePath();

    QFile file(filePath);
    if (file.open(QIODevice::WriteOnly)) {
        QJsonDocument jsonDoc(jsonObject);
        file.write(jsonDoc.toJson());
        file.close();
    }
}

QJsonObject UserManager::loadUserFile() const
{
    QString filePath = getUserFilePath();

    QFile file(filePath);
    if (file.open(QIODevice::ReadOnly)) {
        QByteArray jsonData = file.readAll();
        file.close();
        QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonData));
        return jsonDoc.object();
    }

    return QJsonObject();
}

bool UserManager::checkUserExists(const QString& username)
{
    // 读取现有用户文件
    QJsonObject allUsers = loadUserFile();

    // 检查用户名是否存在
    return allUsers.contains(username);
}

std::vector<User> UserManager::getAllUsers()
{
    std::vector<User> users;

    // 读取现有用户文件
    QJsonObject allUsers = loadUserFile();

    // 遍历所有用户数据，并将其添加到 users 数组中
    for (auto it = allUsers.begin(); it != allUsers.end(); ++it) {
        const QString& username = it.key();
        const QJsonObject& userObject = it.value().toObject();

        User user;
        user.username = username;
        user.password = userObject["password"].toString();
        user.lastLoginTime = userObject["lastLoginTime"].toString();
        user.permissions = userObject["permissions"].toInt();

        users.push_back(user);
    }

    return users;
}

bool UserManager::deleteUser(const QString& username)
{
    // 读取现有用户文件
    QJsonObject allUsers = loadUserFile();

    // 检查用户名是否存在
    if (!allUsers.contains(username)) {
        return false; // 用户名不存在
    }

    // 从用户文件中移除用户
    allUsers.remove(username);

    // 保存用户文件
    saveUserFile(allUsers);

    return true; // 删除用户成功
}

